#ifndef CPP_ASR_SERVICE_H
#define CPP_ASR_SERVICE_H

#include <cvte_asr.h>
#include <utils/Timer.h>

//@brief ASR服务
//@author cvte
//@description 语音识别功能模块相关，可以设置和获取相关状态
class AsrService {
   public:
    static AsrService* getInstance();

    class AsrServiceListener {
       public:
        virtual void onAsrStatusChanged(CVTE_ASR_STATUS status);
        virtual void onAsrOnlineStatusChanged(CVTE_ASR_OL_STATUS status);
        virtual void onAsrTalkDataUpdated(CVTE_ASR_TALK_DATA* talkData);
    };

    //@method ASR服务是否存在
    static bool isExist();
    //@method 获取ASR对话内容
    CVTE_ASR_TALK_DATA* getTalkData();
    //@method 设置ASR的状态
    void setStatus(CVTE_ASR_STATUS status);
    //@method 获取ASR的状态
    CVTE_ASR_STATUS getStatus();
    //@method 设置ASR在线识别的状态
    void setOnlineStatus(CVTE_ASR_OL_STATUS status);
    //@method 获取ASR的在线识别状态
    CVTE_ASR_OL_STATUS getOnlineStatus();
    void statusReq();
    //@method 暂停ASR工作
    void pause();
    //@method 恢复ASR工作
    void resume();
    //@method 延时多少ms恢复ASR工作
    void resume(int DelayMs);

    //@method 通知处理
    void notifyProc(uint32_t id_notify, uint8_t *value);
    //@method 设置监听
    void setListener(AsrServiceListener& listener);

   private:
    static bool mIsExist;
    static AsrService* sInstance;
    Timer mResumeTimer;
    AsrServiceListener *mListener = nullptr;
    CVTE_ASR_TALK_DATA mTalkData;
    CVTE_ASR_STATUS mStatus = CVTE_ASR_STATUS_STOP;
    CVTE_ASR_OL_STATUS mOnlineStatus = CVTE_ASR_OL_STATUS_INACTIVE; //在线识别的状态

    AsrService();
    virtual ~AsrService();
    //@method 恢复ASR工作实际处理
    static bool resumeTimerTask(Timer& timer);
};
#endif